/**
 * 推荐系统的核心类，负责初始化配置并调用各个推荐步骤。
 */
package org.example.ItemCF.src.recommend;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Pattern; // 引入正则表达式用于分隔符匹配

public class Recommend {

    // 配置常量：HDFS路径和分隔符
	public static final String HDFS = "hdfs://192.168.134.132:9000";
	public static final Pattern DELIMITER = Pattern.compile("[\t,]"); // 定义数据分隔符为制表符或逗号

    /**
     * 程序的主入口函数。该函数负责初始化配置路径，并依次调用推荐系统的四个步骤。
     * @param args 命令行参数。本程序未使用该参数。
     * @throws Exception 可能抛出的异常。包括配置路径错误、步骤执行失败等。
     */
	public static void main(String[] args) throws Exception {
        // 初始化配置路径，包括数据路径和各步骤的输入输出路径
		Map<String, String> path = new HashMap<String, String>();
		path.put("data", "data/small.csv"); // 输入数据路径
		path.put("Step1Input", HDFS + "/recommend/input"); // 第一步输入路径
		path.put("Step1Output", path.get("Step1Input") + "/step1"); // 第一步输出路径
		path.put("Step2Input", path.get("Step1Output")); // 第二步输入路径
		path.put("Step2Output", path.get("Step1Input") + "/step2"); // 第二步输出路径
		path.put("Step3Input", path.get("Step1Output")); // 第三步输入路径
		path.put("Step3Output", path.get("Step1Input") + "/step3"); // 第三步输出路径

		path.put("Step4Input1", path.get("Step3Output")); // 第四步输入路径1
		path.put("Step4Input2", path.get("Step2Output")); // 第四步输入路径2
		path.put("Step4Output", path.get("Step1Input") + "/step4"); // 第四步输出路径

        // 调用推荐系统的四个步骤
		Step1Driver.run(path);
		Step2Driver.run(path);
		Step3Driver.run1(path);
		Step4Driver.run(path);
		System.exit(0); // 程序正常结束
	}


}
